//package com.sykj.util.file;
//
//import com.aliyun.oss.OSS;
//import com.aliyun.oss.OSSClient;
//import com.aliyun.oss.model.*;
//import com.sykj.config.AliyunConfig;
//import org.apache.commons.lang3.RandomUtils;
//import org.apache.commons.lang3.StringUtils;
//import org.joda.time.DateTime;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import org.springframework.web.multipart.MultipartFile;
//
//import java.io.*;
//import java.util.List;
//
///**
// * @program: BeautyClub
// * @description:阿里oss操作
// * @author: qiaoli
// * @create: 2020-07-15 17:07
// */
//@Service
//public class FileUploadUtil {
//
//    // 允许上传的格式
//    private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg",
//            ".jpeg", ".gif", ".png"};
//    @Autowired
//    private OSS ossClient;
//    @Autowired
//    private AliyunConfig aliyunConfig;
//
//    /**
//     * @author lastwhisper
//     * @desc 文件上传
//     * 文档链接 https://help.aliyun.com/document_detail/84781.html?spm=a2c4g.11186623.6.749.11987a7dRYVSzn
//     * @email gaojun56@163.com
//     */
//    public FileUploadResult upload(MultipartFile uploadFile) {
//        // 校验图片格式
//        boolean isLegal = false;
//        for (String type : IMAGE_TYPE) {
//            if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(),
//                    type)) {
//                isLegal = true;
//                break;
//            }
//        }
////
//        //封装Result对象，并且将文件的byte数组放置到result对象中
//        OSSClient ossClient = new OSSClient(aliyunConfig.getEndpoint(),aliyunConfig.getAccessKeyId(),aliyunConfig.getAccessKeySecret());
//        //容器不存在，就创建
//        if(! ossClient.doesBucketExist(aliyunConfig.getBucketName())){
//            ossClient.createBucket(aliyunConfig.getBucketName());
//            CreateBucketRequest createBucketRequest = new CreateBucketRequest(aliyunConfig.getBucketName());
//            createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
//            ossClient.createBucket(createBucketRequest);
//        }
//
//
////
//        //封装Result对象，并且将文件的byte数组放置到result对象中
//        FileUploadResult fileUploadResult = new FileUploadResult();
//        if (!isLegal) {
//            fileUploadResult.setStatus("error");
//            return fileUploadResult;
//        }
//        //文件新路径
//        String filePath = aliyunConfig.getFolder()+"/"+uploadFile.getOriginalFilename();
////        String filePath = getFilePath(fileName);
//        ObjectMetadata objectMetadata = new ObjectMetadata();
//        objectMetadata.setContentType("image/jpg");
//        // 上传到阿里云
//        try {
////            ossClient.putObject(aliyunConfig.getBucketName(), filePath, new
////                    ByteArrayInputStream(uploadFile.getBytes()));
//            ossClient.putObject(aliyunConfig.getBucketName(), filePath, new
//                    ByteArrayInputStream(uploadFile.getBytes()),objectMetadata);
//        } catch (Exception e) {
//            e.printStackTrace();
//            //上传失败
//            fileUploadResult.setStatus("error");
//            return fileUploadResult;
//        }
//        fileUploadResult.setStatus("done");
//        fileUploadResult.setResponse("success");
//        //this.aliyunConfig.getUrlPrefix() + filePath 文件路径需要保存到数据库
//        fileUploadResult.setName(this.aliyunConfig.getUrlPrefix() + filePath);
//        fileUploadResult.setUid(String.valueOf(System.currentTimeMillis()));
//        System.err.println(this.aliyunConfig.getUrlPrefix() + filePath+"-----------");
//        System.err.println(this.aliyunConfig.getUrlPrefix() + filePath+"-----------");
//        return fileUploadResult;
//    }
//
//    /**
//     * @author lastwhisper
//     * @desc 生成路径以及文件名 例如：//images/2019/04/28/15564277465972939.jpg
//     * @email gaojun56@163.com
//     */
//    private String getFilePath(String sourceFileName) {
//        DateTime dateTime = new DateTime();
//        return "images/" + dateTime.toString("yyyy")
//                + "/" + dateTime.toString("MM") + "/"
//                + dateTime.toString("dd") + "/" + System.currentTimeMillis() +
//                RandomUtils.nextInt(100, 9999) + "." +
//                StringUtils.substringAfterLast(sourceFileName, ".");
//    }
//
//    /**
//     * @author lastwhisper
//     * @desc 查看文件列表
//     * 文档链接 https://help.aliyun.com/document_detail/84841.html?spm=a2c4g.11186623.2.13.3ad5b5ddqxWWRu#concept-84841-zh
//     * @email gaojun56@163.com
//     */
//    public List<OSSObjectSummary> list() {
//        // 设置最大个数。
//        final int maxKeys = 200;
//        // 列举文件。
//        ObjectListing objectListing = ossClient.listObjects(new ListObjectsRequest(aliyunConfig.getBucketName()).withMaxKeys(maxKeys));
//        List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
//        return sums;
//    }
//
//    /**
//     * @author lastwhisper
//     * @desc 删除文件
//     * 文档链接 https://help.aliyun.com/document_detail/84842.html?spm=a2c4g.11186623.6.770.4f9474b4UYlCtr
//     * @email gaojun56@163.com
//     */
//    public FileUploadResult delete(String objectName) {
//        // 根据BucketName,objectName删除文件
//        ossClient.deleteObject(aliyunConfig.getBucketName(), objectName);
//        FileUploadResult uploadResult = new FileUploadResult();
//        uploadResult.setName(objectName);
//        uploadResult.setStatus("removed");
//        uploadResult.setResponse("success");
//        return uploadResult;
//    }
//
//    /**
//     * @author lastwhisper
//     * @desc 下载文件
//     * 文档链接 https://help.aliyun.com/document_detail/84823.html?spm=a2c4g.11186623.2.7.37836e84ZIuZaC#concept-84823-zh
//     * @email gaojun56@163.com
//     */
//    public void exportOssFile(OutputStream os, String objectName) throws IOException {
//        // ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
//        OSSObject ossObject = ossClient.getObject(aliyunConfig.getBucketName(), objectName);
//        // 读取文件内容。
//        BufferedInputStream in = new BufferedInputStream(ossObject.getObjectContent());
//        BufferedOutputStream out = new BufferedOutputStream(os);
//        byte[] buffer = new byte[1024];
//        int lenght = 0;
//        while ((lenght = in.read(buffer)) != -1) {
//            out.write(buffer, 0, lenght);
//        }
//        if (out != null) {
//            out.flush();
//            out.close();
//        }
//        if (in != null) {
//            in.close();
//        }
//    }
//}
